package lpath

import (
	"fmt"
	"os"
	"path/filepath"
	"strings"
)

// IsFile 是否为文件（存在）
func IsFile(file string) bool {
	fi, err := os.Stat(file)
	if err != nil {
		return false
	}
	if fi.IsDir() {
		return false
	}
	return true
}

func WriteFile(file string, data []byte) error {
	fi, err := CreateFile(file)
	if err != nil {
		return err
	}
	defer fi.Close()
	_, err = fi.Write(data)
	return err
}

func CreateFile(file string) (*os.File, error) {
	path, _ := filepath.Split(file)
	if err := MkdirAll(path); err != nil {
		return nil, err
	}
	return os.OpenFile(file, os.O_CREATE|os.O_RDWR|os.O_TRUNC, 0644)
}

func GetPreFiles(path, prefix string) (files []string, err error) {
	dir, err := os.ReadDir(path)
	if err != nil {
		return nil, err
	}

	for _, fi := range dir {
		if fi.IsDir() {
			continue
		}
		if strings.HasPrefix(fi.Name(), prefix) {
			files = append(files, fi.Name())
		}
	}
	return files, nil
}

func GetExtFiles(path, ext string) (files []string, err error) {
	dir, err := os.ReadDir(path)
	if err != nil {
		return nil, err
	}

	for _, fi := range dir {
		if fi.IsDir() {
			continue
		}
		if strings.HasSuffix(fi.Name(), fmt.Sprintf(".%s", ext)) {
			files = append(files, fi.Name())
		}
	}
	return files, nil
}

func DelFile(file string) error {
	err := os.Remove(file)
	if err != nil {
		return fmt.Errorf("删除文件(%s)失败: %v", file, err)
	}
	return nil
}

func ReadFile(file string) (string, []byte, error) {
	fileName := filepath.Base(file)
	names := strings.Split(fileName, ".")
	topic := names[0]
	data, err := os.ReadFile(file)
	if err != nil {
		return topic, nil, fmt.Errorf("读取文件(%s)失败: %v", file, err)
	}
	return topic, data, nil
}
